package cn.codergege.kotlinbasics.valvar

import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest

@SpringBootTest
class ValVarDemoTest {

    @Test fun testVar() {
        // 声明一个名为 oneVar 的 var 变量, 并赋值
        var oneVar = "codergege"
        // 做个断言测试
        assertEquals("codergege", oneVar)

        // 可以延迟赋值
        var anotherVar: String
        anotherVar = "kotlin"
        assertEquals("kotlin", anotherVar)

        // var 变量可以重新赋值
        anotherVar = "kotlin kotlin"
        assertEquals("kotlin kotlin", anotherVar)
    }

    @Test fun testVal() {
        // 声明一个名为 oneVal 的 val 变量, 并初始化
        val oneVal = "codergege"
        assertEquals("codergege", oneVal)

        // val 变量也可以延迟初始化!
        val anotherVal: String
        anotherVal = "kotlin"
        assertEquals("kotlin", anotherVal)

        // val 一旦初始化, 就不可改变
        // anotherVal = "kotlin kotlin" // 编译不通过, 报错了

        // 演示内部成员是可变的
        val oneArray = intArrayOf(1, 2, 3, 4, 5)
        // oneArray = intArrayOf(7, 8, 9) // 编译不通过, 无法改变 val 变量的值
        // 但是内部成员是可变的
        oneArray[0] = 10
        assertEquals(10, oneArray[0])
    }

}